<!DOCTYPE html><html lang="zh-CN" data-theme="light"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"><title>Oct25-X</title><meta name="author" content="Oct25-X"><meta name="copyright" content="Oct25-X"><meta name="format-detection" content="telephone=no"><meta name="theme-color" content="#ffffff"><meta property="og:type" content="website">
<meta property="og:title" content="Oct25-X">
<meta property="og:url" content="https://oct25-x.atomgit.net/oct25-xxxxx/page/5/index.html">
<meta property="og:site_name" content="Oct25-X">
<meta property="og:locale" content="zh_CN">
<meta property="og:image" content="https://oct25-x.atomgit.net/oct25-xxxxx/img/avatar.jpg">
<meta property="article:author" content="Oct25-X">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="https://oct25-x.atomgit.net/oct25-xxxxx/img/avatar.jpg"><link rel="shortcut icon" href="/oct25-xxxxx/img/logo.jpg"><link rel="canonical" href="https://oct25-x.atomgit.net/oct25-xxxxx/page/5/"><link rel="preconnect" href="//cdn.jsdelivr.net"/><link rel="preconnect" href="//busuanzi.ibruce.info"/><link rel="stylesheet" href="/oct25-xxxxx/css/index.css"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6/css/all.min.css" media="print" onload="this.media='all'"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fancyapps/ui/dist/fancybox.css" media="print" onload="this.media='all'"><script>const GLOBAL_CONFIG = { 
  root: '/oct25-xxxxx/',
  algolia: undefined,
  localSearch: {"path":"search.json","languages":{"hits_empty":"找不到您查询的内容：${query}"}},
  translate: {"defaultEncoding":2,"translateDelay":0,"msgToTraditionalChinese":"繁","msgToSimplifiedChinese":"簡"},
  noticeOutdate: undefined,
  highlight: {"plugin":"highlighjs","highlightCopy":true,"highlightLang":true,"highlightHeightLimit":false},
  copy: {
    success: '复制成功',
    error: '复制错误',
    noSupport: '浏览器不支持'
  },
  relativeDate: {
    homepage: false,
    post: false
  },
  runtime: '',
  date_suffix: {
    just: '刚刚',
    min: '分钟前',
    hour: '小时前',
    day: '天前',
    month: '个月前'
  },
  copyright: undefined,
  lightbox: 'fancybox',
  Snackbar: undefined,
  source: {
    justifiedGallery: {
      js: 'https://cdn.jsdelivr.net/npm/flickr-justified-gallery@2/dist/fjGallery.min.js',
      css: 'https://cdn.jsdelivr.net/npm/flickr-justified-gallery@2/dist/fjGallery.min.css'
    }
  },
  isPhotoFigcaption: false,
  islazyload: false,
  isAnchor: false
}</script><script id="config-diff">var GLOBAL_CONFIG_SITE = {
  title: 'Oct25-X',
  isPost: false,
  isHome: true,
  isHighlightShrink: false,
  isToc: false,
  postUpdate: '2024-05-19 17:27:58'
}</script><noscript><style type="text/css">
  #nav {
    opacity: 1
  }
  .justified-gallery img {
    opacity: 1
  }

  #recent-posts time,
  #post-meta time {
    display: inline !important
  }
</style></noscript><script>(win=>{
    win.saveToLocal = {
      set: function setWithExpiry(key, value, ttl) {
        if (ttl === 0) return
        const now = new Date()
        const expiryDay = ttl * 86400000
        const item = {
          value: value,
          expiry: now.getTime() + expiryDay,
        }
        localStorage.setItem(key, JSON.stringify(item))
      },

      get: function getWithExpiry(key) {
        const itemStr = localStorage.getItem(key)

        if (!itemStr) {
          return undefined
        }
        const item = JSON.parse(itemStr)
        const now = new Date()

        if (now.getTime() > item.expiry) {
          localStorage.removeItem(key)
          return undefined
        }
        return item.value
      }
    }
  
    win.getScript = url => new Promise((resolve, reject) => {
      const script = document.createElement('script')
      script.src = url
      script.async = true
      script.onerror = reject
      script.onload = script.onreadystatechange = function() {
        const loadState = this.readyState
        if (loadState && loadState !== 'loaded' && loadState !== 'complete') return
        script.onload = script.onreadystatechange = null
        resolve()
      }
      document.head.appendChild(script)
    })
  
      win.activateDarkMode = function () {
        document.documentElement.setAttribute('data-theme', 'dark')
        if (document.querySelector('meta[name="theme-color"]') !== null) {
          document.querySelector('meta[name="theme-color"]').setAttribute('content', '#0d0d0d')
        }
      }
      win.activateLightMode = function () {
        document.documentElement.setAttribute('data-theme', 'light')
        if (document.querySelector('meta[name="theme-color"]') !== null) {
          document.querySelector('meta[name="theme-color"]').setAttribute('content', '#ffffff')
        }
      }
      const t = saveToLocal.get('theme')
    
          if (t === 'dark') activateDarkMode()
          else if (t === 'light') activateLightMode()
        
      const asideStatus = saveToLocal.get('aside-status')
      if (asideStatus !== undefined) {
        if (asideStatus === 'hide') {
          document.documentElement.classList.add('hide-aside')
        } else {
          document.documentElement.classList.remove('hide-aside')
        }
      }
    
    const detectApple = () => {
      if(/iPad|iPhone|iPod|Macintosh/.test(navigator.userAgent)){
        document.documentElement.classList.add('apple')
      }
    }
    detectApple()
    })(window)</script><link rel="stylesheet" href="/css/rightMenu.css"><meta name="generator" content="Hexo 6.1.0"></head><body><div id="sidebar"><div id="menu-mask"></div><div id="sidebar-menus"><div class="avatar-img is-center"><img src="/oct25-xxxxx/img/avatar.jpg" onerror="onerror=null;src='/img/friend_404.gif'" alt="avatar"/></div><div class="site-data is-center"><div class="data-item"><a href="/oct25-xxxxx/archives/"><div class="headline">文章</div><div class="length-num">52</div></a></div><div class="data-item"><a href="/oct25-xxxxx/tags/"><div class="headline">标签</div><div class="length-num">17</div></a></div><div class="data-item"><a href="/oct25-xxxxx/categories/"><div class="headline">分类</div><div class="length-num">8</div></a></div></div><hr/><div class="menus_items"><div class="menus_item"><a class="site-page" href="/oct25-xxxxx/"><i class="fa-fw fas fa-home"></i><span> 首页</span></a></div><div class="menus_item"><a class="site-page" href="/oct25-xxxxx/archives/"><i class="fa-fw fas fa-archive"></i><span> 归档</span></a></div><div class="menus_item"><a class="site-page" href="/oct25-xxxxx/tags/"><i class="fa-fw fas fa-tags"></i><span> 标签</span></a></div><div class="menus_item"><a class="site-page" href="/oct25-xxxxx/categories/"><i class="fa-fw fas fa-folder-open"></i><span> 分类</span></a></div><div class="menus_item"><a class="site-page" href="/oct25-xxxxx/about/"><i class="fa-fw fas fa-heart"></i><span> 关于</span></a></div></div></div></div><div class="page" id="body-wrap"><header class="full_page" id="page-header" style="background-image: url('/oct25-xxxxx/img/bg.png')"><nav id="nav"><span id="blog_name"><a id="site-name" href="/oct25-xxxxx/">Oct25-X</a></span><div id="menus"><div id="search-button"><a class="site-page social-icon search"><i class="fas fa-search fa-fw"></i><span> 搜索</span></a></div><div class="menus_items"><div class="menus_item"><a class="site-page" href="/oct25-xxxxx/"><i class="fa-fw fas fa-home"></i><span> 首页</span></a></div><div class="menus_item"><a class="site-page" href="/oct25-xxxxx/archives/"><i class="fa-fw fas fa-archive"></i><span> 归档</span></a></div><div class="menus_item"><a class="site-page" href="/oct25-xxxxx/tags/"><i class="fa-fw fas fa-tags"></i><span> 标签</span></a></div><div class="menus_item"><a class="site-page" href="/oct25-xxxxx/categories/"><i class="fa-fw fas fa-folder-open"></i><span> 分类</span></a></div><div class="menus_item"><a class="site-page" href="/oct25-xxxxx/about/"><i class="fa-fw fas fa-heart"></i><span> 关于</span></a></div></div><div id="toggle-menu"><a class="site-page"><i class="fas fa-bars fa-fw"></i></a></div></div></nav><div id="site-info"><h1 id="site-title">Oct25-X</h1><div id="site-subtitle"><span id="subtitle"></span></div></div><div id="scroll-down"><i class="fas fa-angle-down scroll-down-effects"></i></div></header><main class="layout" id="content-inner"><div class="recent-posts" id="recent-posts"><div class="recent-post-item"><div class="post_cover left"><a href="/oct25-xxxxx/2023/07/08/11Redis%20%E4%B8%8E%20MySQL%20%E7%9A%84%E6%95%B0%E6%8D%AE%E4%B8%80%E8%87%B4%E6%80%A7%E9%97%AE%E9%A2%98/" title="Redis 与 MySQL 的数据一致性问题"><img class="post_bg" src="/oct25-xxxxx/img/cover_img/ctt11.png" onerror="this.onerror=null;this.src='/oct25-xxxxx/img/404.jpg'" alt="Redis 与 MySQL 的数据一致性问题"></a></div><div class="recent-post-info"><a class="article-title" href="/oct25-xxxxx/2023/07/08/11Redis%20%E4%B8%8E%20MySQL%20%E7%9A%84%E6%95%B0%E6%8D%AE%E4%B8%80%E8%87%B4%E6%80%A7%E9%97%AE%E9%A2%98/" title="Redis 与 MySQL 的数据一致性问题">Redis 与 MySQL 的数据一致性问题</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2023-07-08T14:19:36.000Z" title="发表于 2023-07-08 22:19:36">2023-07-08</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/oct25-xxxxx/categories/%E9%9A%8F%E7%AC%94/">随笔</a></span></div><div class="content">概述在业务中使用缓存的场景，存在高并发，并且读多写少，然后我们使用缓存（Redis）来提高性能，当我们使用 Redis 作为缓存时，一般的流程如下：

查询数据时，直接从缓存中命中需要的数据，这样就可以直接返回，不需要再从数据库查询数据；



当我们查询的数据不存在缓存时，这时需要直接访问数据库查询所需数据，并且将查询到的数据写入到缓存中，然后返回查询出的数据；


数据一致性问题数据一致性问题指的是 Redis 中的数据与 MySQL 中的数据不一致，如 MySQL 中的数据更新了，我时我们有两种方案处理所述的这种情况
1. 先操作缓存，再操作数据库
2. 先操作数据库，再操作缓存
无论选择哪一种方式，我们必须要保证两个操作同时成功，或同时失败；否则，就导致 Redis 数据与 MySQL 数据不一致的情况发生
Redis 是更新还是删除在数据库数据发生变化的时候，对于 Redis 来说，我们是需要删除缓存中的数据呢，还是更新缓存中的数据？
推荐：数据库数据变化后，直接给缓存中的数据删除，这样简单直接，等下次访问时再从数据库中获取即可
数据一致性问题两个解决方案的选择一、先更新数据 ...</div></div></div><div class="recent-post-item"><div class="post_cover right"><a href="/oct25-xxxxx/2023/07/08/12Redis-%E7%BC%93%E5%AD%98%E5%87%BB%E7%A9%BF%EF%BC%8C%E7%BC%93%E5%AD%98%E7%A9%BF%E9%80%8F%EF%BC%8C%E7%BC%93%E5%AD%98%E9%9B%AA%E5%B4%A9/" title="Redis 缓存击穿，缓存穿透，缓存雪崩"><img class="post_bg" src="/oct25-xxxxx/img/cover_img/ctt12.png" onerror="this.onerror=null;this.src='/oct25-xxxxx/img/404.jpg'" alt="Redis 缓存击穿，缓存穿透，缓存雪崩"></a></div><div class="recent-post-info"><a class="article-title" href="/oct25-xxxxx/2023/07/08/12Redis-%E7%BC%93%E5%AD%98%E5%87%BB%E7%A9%BF%EF%BC%8C%E7%BC%93%E5%AD%98%E7%A9%BF%E9%80%8F%EF%BC%8C%E7%BC%93%E5%AD%98%E9%9B%AA%E5%B4%A9/" title="Redis 缓存击穿，缓存穿透，缓存雪崩">Redis 缓存击穿，缓存穿透，缓存雪崩</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2023-07-08T14:19:36.000Z" title="发表于 2023-07-08 22:19:36">2023-07-08</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/oct25-xxxxx/categories/%E9%9A%8F%E7%AC%94/">随笔</a></span></div><div class="content">前言首先，我们使用的后台数据库（像是 MySQL）是基于磁盘的，而磁盘的读&#x2F;写速度相对是比较慢的。
在某些场景下，使得访问量激增，就会导致在短时间内多次访问后台数据库，这个时候就容易造成数据库的瘫痪，从而使得我们程序宕机。
为了解决上述这个问题，就引入了像是 Redis 这种缓存数据库，将短时间内需要多次访问的数据放到 Redis 中直接从缓存中获取数据，这样既提高程序的访问速度，又能减少我们对后台数据库的访问。
但是，Redis 中的数据也是需要先从后台数据库中查询出来后，再放到 Redis 中的，这个过程就可能会出现缓存击穿，缓存穿透或缓存雪崩这些问题。
缓存击穿一、什么是缓存击穿缓存击穿：缓存中没有（一般缓存时间到期），但是数据库中存在的数据。如果大量的用户同时访问，请求会先到缓存中，发现没有当前数据，就会去数据库中去查询该数据，这时就会造成数据库的压力突然增大。
二、缓存击穿的危害数据库瞬间压力激增，造成大量请求阻塞
三、解决方案1）互斥锁（Mutex Key）
让某一个线程回写缓存，其他线程等待其回写完成后，再执行读缓存即可。
2）热点数据永不过期
永不过期的两种解 ...</div></div></div><div class="recent-post-item"><div class="post_cover left"><a href="/oct25-xxxxx/2023/07/04/10%E5%A4%A7%E6%95%B0%E6%8D%AE%E4%B9%8B%E5%BC%80%E6%BA%90%E7%BC%93%E5%AD%98%E6%95%B0%E6%8D%AE%E5%BA%93%20Redis/" title="大数据之开源缓存数据库 Redis"><img class="post_bg" src="/oct25-xxxxx/img/cover_img/ctt10.png" onerror="this.onerror=null;this.src='/oct25-xxxxx/img/404.jpg'" alt="大数据之开源缓存数据库 Redis"></a></div><div class="recent-post-info"><a class="article-title" href="/oct25-xxxxx/2023/07/04/10%E5%A4%A7%E6%95%B0%E6%8D%AE%E4%B9%8B%E5%BC%80%E6%BA%90%E7%BC%93%E5%AD%98%E6%95%B0%E6%8D%AE%E5%BA%93%20Redis/" title="大数据之开源缓存数据库 Redis">大数据之开源缓存数据库 Redis</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2023-07-04T12:19:36.000Z" title="发表于 2023-07-04 20:19:36">2023-07-04</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/oct25-xxxxx/categories/NoSQL%E6%95%B0%E6%8D%AE%E5%BA%93/">NoSQL数据库</a></span></div><div class="content">数据库简介一、NoSQL 概述
NoSQL（NoSQL &#x3D; Not Only SQL ），意即“不仅仅是 SQL”，泛指非关系型的数据库。
NoSQL 不依赖业务逻辑方式存储，而以简单的 key-value 模式存储。因此大大的增加了数据库的扩展能力。
不遵循 SQL 标准。
不支持 ACID。
远超于 SQL 的性能。

二、NoSQL 的适用场景
对数据高并发的读写。
海量数据的读写。
对数据高可扩展性的。

三、NoSQL 不适用场景
需要事务支持。
基于 sql 的结构化查询存储，处理复杂的关系,需要即席查询。

四、NoSQL 数据库缓存数据库Memcached


很早出现的NoSql数据库；
数据都在内存中，一般不持久化；
支持简单的 key-value 模式；
一般是作为缓存数据库辅助持久化的数据库；
多线程 + 锁的机制。

Redis


几乎覆盖了 Memcached 的绝大部分功能；
数据都在内存中，支持持久化，主要用作备份恢复；
除了支持简单的 key-value 模式，还支持多种数据结构的存储，比如 list、set、hash、zset等；
一般是 ...</div></div></div><div class="recent-post-item"><div class="post_cover right"><a href="/oct25-xxxxx/2023/06/30/09%E5%A4%A7%E6%95%B0%E6%8D%AE%E4%B9%8B%E5%88%86%E5%B8%83%E5%BC%8F%E5%8D%8F%E8%B0%83%E7%B3%BB%E7%BB%9F%20Zookeeper/" title="大数据之分布式协调系统 Zookeeper"><img class="post_bg" src="/oct25-xxxxx/img/cover_img/ctt9.png" onerror="this.onerror=null;this.src='/oct25-xxxxx/img/404.jpg'" alt="大数据之分布式协调系统 Zookeeper"></a></div><div class="recent-post-info"><a class="article-title" href="/oct25-xxxxx/2023/06/30/09%E5%A4%A7%E6%95%B0%E6%8D%AE%E4%B9%8B%E5%88%86%E5%B8%83%E5%BC%8F%E5%8D%8F%E8%B0%83%E7%B3%BB%E7%BB%9F%20Zookeeper/" title="大数据之分布式协调系统 Zookeeper">大数据之分布式协调系统 Zookeeper</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2023-06-30T09:33:16.000Z" title="发表于 2023-06-30 17:33:16">2023-06-30</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/oct25-xxxxx/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE%E7%BB%84%E4%BB%B6/">大数据组件</a></span></div><div class="content">Zookeeper 入门一、概述Zookeeper 是一个开源的分布式的，为分布式应用提供协调服务的Apache项目。
Zookeeper 从设计模式角度来理解：是一个基于观察者模式设计的分布式服务管理框架，它负责存储和管理大家都关心的数据，然后接受观察者的注册，一旦这些数据的状态发生变化，Zookeeper 就将负责通知已经在 Zookeeper 上注册的那些观察者做出相应的反应。
二、特点
Zookeeper，一个领导者（Leader），多个跟随者（Follower）组成的集群。
集群中只要有半数以上节点存活，Zookeeper集群就能正常服务。
全局数据一致，每个 Server 保存一份相同的数据副本，Client 无论连接到哪个 Server，数据都是一致的。
更新请求顺序进行，来自同一个 Client 的更新请求按其发送顺序依次执行。
数据更新原子性，一次数据更新要么成功，要么失败。
实时性，在一定时间范围内，Client能读到最新数据。

三、数据结构ZooKeeper 数据模型的结构与 Unix 文件系统很类似，整体上可以看作是一棵树，每个节点称做一个 ZNode。每一个 ...</div></div></div><div class="recent-post-item"><div class="post_cover left"><a href="/oct25-xxxxx/2023/06/23/08%E5%A4%A7%E6%95%B0%E6%8D%AE%E4%B9%8BHadoop07_Hadoop%20%E9%AB%98%E5%8F%AF%E7%94%A8%E9%83%A8%E7%BD%B2/" title="大数据之Hadoop07_Hadoop 高可用部署"><img class="post_bg" src="/oct25-xxxxx/img/cover_img/ctt8.png" onerror="this.onerror=null;this.src='/oct25-xxxxx/img/404.jpg'" alt="大数据之Hadoop07_Hadoop 高可用部署"></a></div><div class="recent-post-info"><a class="article-title" href="/oct25-xxxxx/2023/06/23/08%E5%A4%A7%E6%95%B0%E6%8D%AE%E4%B9%8BHadoop07_Hadoop%20%E9%AB%98%E5%8F%AF%E7%94%A8%E9%83%A8%E7%BD%B2/" title="大数据之Hadoop07_Hadoop 高可用部署">大数据之Hadoop07_Hadoop 高可用部署</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2023-06-23T12:17:22.000Z" title="发表于 2023-06-23 20:17:22">2023-06-23</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/oct25-xxxxx/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE%E7%BB%84%E4%BB%B6/">大数据组件</a></span></div><div class="content">集群规划


组件
服务
hadoop102
hadoop103
hadoop104



HDFS
NameNode
✔
✔



HDFS
DataNode
✔
✔
✔


HDFS
JournalNode
✔
✔
✔


HDFS
DFSZKFailoverController
✔
✔



YARN
ResourceManager

✔
✔


YARN
NodeManager
✔
✔
✔


Hadoop HA 部署一、安装JDK略
二、安装 Zookeeper略
三、解压1tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/

四、添加环境变量1sudo vim /etc/profile.d/myEnv.sh

添加 hadoop 环境变量
123#HADOOP_HOMEexport HADOOP_HOME=/opt/module/hadoop-3.1.3export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

刷新配置
1source /etc/profile

测试环境变量是否配置成 ...</div></div></div><div class="recent-post-item"><div class="post_cover right"><a href="/oct25-xxxxx/2023/06/17/07%E5%A4%A7%E6%95%B0%E6%8D%AE%E4%B9%8BHadoop06_%E7%B3%BB%E7%BB%9F%E8%B0%83%E4%BC%98%E6%89%8B%E5%86%8C/" title="大数据之Hadoop06_系统调优手册"><img class="post_bg" src="/oct25-xxxxx/img/cover_img/ctt7.png" onerror="this.onerror=null;this.src='/oct25-xxxxx/img/404.jpg'" alt="大数据之Hadoop06_系统调优手册"></a></div><div class="recent-post-info"><a class="article-title" href="/oct25-xxxxx/2023/06/17/07%E5%A4%A7%E6%95%B0%E6%8D%AE%E4%B9%8BHadoop06_%E7%B3%BB%E7%BB%9F%E8%B0%83%E4%BC%98%E6%89%8B%E5%86%8C/" title="大数据之Hadoop06_系统调优手册">大数据之Hadoop06_系统调优手册</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2023-06-17T07:30:29.000Z" title="发表于 2023-06-17 15:30:29">2023-06-17</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/oct25-xxxxx/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE%E7%BB%84%E4%BB%B6/">大数据组件</a></span></div><div class="content">HDFS —— 核心参数一、NameNode 内存生产配置NameNode 内存计算每个文件块大概占用 150byte，一台服务器 128G 内存为例，能存储多少文件块呢？
12128 * 1024 * 1024 * 1024 / 150Byte ≈ 9.1亿G      MB     KB    Byte

配置 NameNode 内存hadoop-env.sh 中描述 Hadoop 的内存是动态分配的
12345678910111213# The maximum amount of heap to use (Java -Xmx). If no unit# is provided, it will be converted to MB. Daemons will# prefer any Xmx setting in their respective _OPT variable.# There is no default; the JVM will autoscale based upon machine# memory size.# export HADOOP_HEAPSIZE_MA ...</div></div></div><div class="recent-post-item"><div class="post_cover left"><a href="/oct25-xxxxx/2023/06/15/06%E5%A4%A7%E6%95%B0%E6%8D%AE%E4%B9%8BHadoop05_%E5%88%86%E5%B8%83%E5%BC%8F%E8%B5%84%E6%BA%90%E8%B0%83%E5%BA%A6%E6%A1%86%E6%9E%B6%20Yarn/" title="大数据之Hadoop05_分布式资源调度框架 Yarn"><img class="post_bg" src="/oct25-xxxxx/img/cover_img/ctt6.png" onerror="this.onerror=null;this.src='/oct25-xxxxx/img/404.jpg'" alt="大数据之Hadoop05_分布式资源调度框架 Yarn"></a></div><div class="recent-post-info"><a class="article-title" href="/oct25-xxxxx/2023/06/15/06%E5%A4%A7%E6%95%B0%E6%8D%AE%E4%B9%8BHadoop05_%E5%88%86%E5%B8%83%E5%BC%8F%E8%B5%84%E6%BA%90%E8%B0%83%E5%BA%A6%E6%A1%86%E6%9E%B6%20Yarn/" title="大数据之Hadoop05_分布式资源调度框架 Yarn">大数据之Hadoop05_分布式资源调度框架 Yarn</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2023-06-15T02:25:47.000Z" title="发表于 2023-06-15 10:25:47">2023-06-15</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/oct25-xxxxx/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE%E7%BB%84%E4%BB%B6/">大数据组件</a></span></div><div class="content">Yarn 概述Yarn 是一个资源调度平台，负责为运算程序提供服务器运算资源，相当于一个分布式的操作系统平台，而 MapReduce 等运算程序则相当于运行于操作系统之上的应用程序。
一、Yarn 架构
ResuorceManager（RM）：处理客户端请求； 监控NodeManager； 启动或监控ApplicationMaster； 资源的分配与调度；
NodeManager（NM）管理单个节点上的资源； 处理来自ResourceManger的命令 处理来自ApplicationMaster的命令
ApplicationMaster（AM）负责数据的切分 为应用程序申请资源，并分配给内部的任务 任务的监控与容错
ContainerContainer是YARN中的资源抽象，它封装了某个节点上的多维度资源，如内存、CPU、磁盘、网络等
Yarn 的工作机制和提交流程
Yarn 常用命令一、查看任务查看所有 application
1yarn application -list

根据 application 状态过滤
1yarn application -list -appStates ...</div></div></div><div class="recent-post-item"><div class="post_cover right"><a href="/oct25-xxxxx/2023/06/06/05%E5%A4%A7%E6%95%B0%E6%8D%AE%E4%B9%8BHadoop04_%E5%88%86%E5%B8%83%E5%BC%8F%E8%AE%A1%E7%AE%97%E6%A1%86%E6%9E%B6%20MapReduce/" title="大数据之Hadoop04_分布式计算框架 MapReduce"><img class="post_bg" src="/oct25-xxxxx/img/cover_img/ctt5.png" onerror="this.onerror=null;this.src='/oct25-xxxxx/img/404.jpg'" alt="大数据之Hadoop04_分布式计算框架 MapReduce"></a></div><div class="recent-post-info"><a class="article-title" href="/oct25-xxxxx/2023/06/06/05%E5%A4%A7%E6%95%B0%E6%8D%AE%E4%B9%8BHadoop04_%E5%88%86%E5%B8%83%E5%BC%8F%E8%AE%A1%E7%AE%97%E6%A1%86%E6%9E%B6%20MapReduce/" title="大数据之Hadoop04_分布式计算框架 MapReduce">大数据之Hadoop04_分布式计算框架 MapReduce</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2023-06-06T06:52:29.000Z" title="发表于 2023-06-06 14:52:29">2023-06-06</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/oct25-xxxxx/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE%E7%BB%84%E4%BB%B6/">大数据组件</a></span></div><div class="content">MapReduce 概述一、MapReduce 定义MapReduce 是一个分布式运算程序的编程框架，是用户开发”基于 Hadoop 的数据分析应用”的核心框架。
MapReduce 核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序，并发运行在一个 Hadoop 集群上。
二、MapReduce 优缺点优点：

易于编程；
良好的扩展性；
高容错性；
适合 PB 级以上海量数据的离线处理；

缺点：

不擅长实时计算；

不擅长流式计算；

不擅长DAG计算；


三、MapReduce 的核心思想
分布式的运算程序往往需要分成至少2个阶段；
第一个阶段的 MapTask 并发实例，完全并行运行，互不相干；
第二个阶段的 ReduceTask 并发实例，互不相干，但是他们的数据依赖于上一个阶段的所有 MapTask 并发实例的输出；
MapReduce 编程模型只能包含一个 Map 阶段和一个 Reduce 阶段，如果用户的业务逻辑非常复杂，那就只能多个 MapReduce 程序，串行运行；

总结：分析 WordCount 数据流走向深入理解 MapR ...</div></div></div><div class="recent-post-item"><div class="post_cover left"><a href="/oct25-xxxxx/2023/06/02/04%E5%A4%A7%E6%95%B0%E6%8D%AE%E4%B9%8BHadoop03_%E5%88%86%E5%B8%83%E5%BC%8F%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%20HDFS/" title="大数据之Hadoop03_分布式文件系统 HDFS"><img class="post_bg" src="/oct25-xxxxx/img/cover_img/ctt4.png" onerror="this.onerror=null;this.src='/oct25-xxxxx/img/404.jpg'" alt="大数据之Hadoop03_分布式文件系统 HDFS"></a></div><div class="recent-post-info"><a class="article-title" href="/oct25-xxxxx/2023/06/02/04%E5%A4%A7%E6%95%B0%E6%8D%AE%E4%B9%8BHadoop03_%E5%88%86%E5%B8%83%E5%BC%8F%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%20HDFS/" title="大数据之Hadoop03_分布式文件系统 HDFS">大数据之Hadoop03_分布式文件系统 HDFS</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2023-06-02T05:31:22.000Z" title="发表于 2023-06-02 13:31:22">2023-06-02</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/oct25-xxxxx/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE%E7%BB%84%E4%BB%B6/">大数据组件</a></span></div><div class="content">HDFS 概述HDFS（Hadoop Distributed File System），它是一个文件系统，用于存储文件，通过目录树来定位文件；其次，它是分布式的，由很多服务器联合起来实现其功能，集群中的服务器有各自的角色。
一、HDFS 产生背景随着数据量越来越大，在一个操作系统存不下所有的数据，那么就分配到更多的操作系统管理的磁盘中，但是不方便管理和维护，迫切需要一种系统来管理多台机器上的文件，这就是分布式文件管理系统。
HDFS 只是分布式文件管理系统中的一种。
二、HDFS 定义HDFS（Hadoop Distributed File System），它是一个文件系统，用于存储文件，通过目录树来定位文件；其次，它是分布式的，由很多服务器联合起来实现其功能，集群中的服务器有各自的角色。
三、HDFS 使用场景适合一次写入，多次读出，不支持文件的修改。
适合用来做分析，但是不适合做网盘。
四、HDFS 优缺点优点：高容错性（副本机制）；适合处理大数据（分布式）；高可靠性（多副本）；
缺点：不适合实时访问数据；无法高效存储大量小文件；不支持并发写入、文件随机修改；
五、HDFS 组成架 ...</div></div></div><div class="recent-post-item"><div class="post_cover right"><a href="/oct25-xxxxx/2023/05/29/03%E5%A4%A7%E6%95%B0%E6%8D%AE%E4%B9%8BHadoop02_%E9%9B%86%E7%BE%A4%E6%90%AD%E5%BB%BA/" title="大数据之Hadoop02_集群搭建"><img class="post_bg" src="/oct25-xxxxx/img/cover_img/ctt3.png" onerror="this.onerror=null;this.src='/oct25-xxxxx/img/404.jpg'" alt="大数据之Hadoop02_集群搭建"></a></div><div class="recent-post-info"><a class="article-title" href="/oct25-xxxxx/2023/05/29/03%E5%A4%A7%E6%95%B0%E6%8D%AE%E4%B9%8BHadoop02_%E9%9B%86%E7%BE%A4%E6%90%AD%E5%BB%BA/" title="大数据之Hadoop02_集群搭建">大数据之Hadoop02_集群搭建</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2023-05-29T02:15:36.000Z" title="发表于 2023-05-29 10:15:36">2023-05-29</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/oct25-xxxxx/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE%E7%BB%84%E4%BB%B6/">大数据组件</a></span></div><div class="content">集群规划




hadoop102
hadoop103
hadoop104



HDFS
NameNode
✔




HDFS
DataNode
✔
✔
✔


HDFS
SecondaryNameNode


✔


YARN
ResourceManager

✔



YARN
NodeManager
✔
✔
✔



JobHistoryServer


✔


JDK 安装
卸载现有JDK

12345# 查看rpm -qa | grep java# 卸载rpm -qa | grep java | xargs sudo rpm -e --nodeps


上传，解压

1tar -zxvf jdk-8u144-linux-x64.tar.gz -C /opt/module/


配置环境变量

1sudo vim /etc/profile.d/myEnv.sh

添加以下代码内容：
123#JAVA_HOMEexport JAVA_HOME=/opt/module/jdk1.8.0_144export PATH=$PATH:$JAVA_HOME/bin


集群间同步 J ...</div></div></div><nav id="pagination"><div class="pagination"><a class="extend prev" rel="prev" href="/oct25-xxxxx/page/4/#content-inner"><i class="fas fa-chevron-left fa-fw"></i></a><a class="page-number" href="/oct25-xxxxx/">1</a><span class="space">&hellip;</span><a class="page-number" href="/oct25-xxxxx/page/4/#content-inner">4</a><span class="page-number current">5</span><a class="page-number" href="/oct25-xxxxx/page/6/#content-inner">6</a><a class="extend next" rel="next" href="/oct25-xxxxx/page/6/#content-inner"><i class="fas fa-chevron-right fa-fw"></i></a></div></nav></div><div class="aside-content" id="aside-content"><div class="card-widget card-info"><div class="is-center"><div class="avatar-img"><img src="/oct25-xxxxx/img/avatar.jpg" onerror="this.onerror=null;this.src='/oct25-xxxxx/img/friend_404.gif'" alt="avatar"/></div><div class="author-info__name">Oct25-X</div><div class="author-info__description"></div></div><div class="card-info-data is-center"><div class="card-info-data-item"><a href="/oct25-xxxxx/archives/"><div class="headline">文章</div><div class="length-num">52</div></a></div><div class="card-info-data-item"><a href="/oct25-xxxxx/tags/"><div class="headline">标签</div><div class="length-num">17</div></a></div><div class="card-info-data-item"><a href="/oct25-xxxxx/categories/"><div class="headline">分类</div><div class="length-num">8</div></a></div></div><a id="card-info-btn" target="_blank" rel="noopener" href="https://github.com/xxxxxx"><i class="fab fa-github"></i><span>Follow Me</span></a></div><div class="sticky_layout"><div class="card-widget card-recent-post"><div class="item-headline"><i class="fas fa-history"></i><span>最新文章</span></div><div class="aside-list"><div class="aside-list-item"><a class="thumbnail" href="/oct25-xxxxx/2024/02/24/52%E5%A4%A7%E6%95%B0%E6%8D%AE%E4%B9%8B%E5%A4%9A%E8%8C%83%E5%BC%8F%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80Scala09_%E9%9A%90%E5%BC%8F%E8%BD%AC%E6%8D%A2%E3%80%81%E5%BC%82%E5%B8%B8%E5%92%8C%E6%B3%9B%E5%9E%8B/" title="大数据之多范式编程语言 Scala09_隐式转换、异常和泛型"><img src="/oct25-xxxxx/img/cover_img/ctt52.png" onerror="this.onerror=null;this.src='/oct25-xxxxx/img/404.jpg'" alt="大数据之多范式编程语言 Scala09_隐式转换、异常和泛型"/></a><div class="content"><a class="title" href="/oct25-xxxxx/2024/02/24/52%E5%A4%A7%E6%95%B0%E6%8D%AE%E4%B9%8B%E5%A4%9A%E8%8C%83%E5%BC%8F%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80Scala09_%E9%9A%90%E5%BC%8F%E8%BD%AC%E6%8D%A2%E3%80%81%E5%BC%82%E5%B8%B8%E5%92%8C%E6%B3%9B%E5%9E%8B/" title="大数据之多范式编程语言 Scala09_隐式转换、异常和泛型">大数据之多范式编程语言 Scala09_隐式转换、异常和泛型</a><time datetime="2024-02-24T04:55:34.000Z" title="发表于 2024-02-24 12:55:34">2024-02-24</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/oct25-xxxxx/2024/02/24/51%E5%A4%A7%E6%95%B0%E6%8D%AE%E4%B9%8B%E5%A4%9A%E8%8C%83%E5%BC%8F%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80Scala08_%E6%A8%A1%E5%BC%8F%E5%8C%B9%E9%85%8D/" title="大数据之多范式编程语言 Scala08_模式匹配"><img src="/oct25-xxxxx/img/cover_img/ctt51.png" onerror="this.onerror=null;this.src='/oct25-xxxxx/img/404.jpg'" alt="大数据之多范式编程语言 Scala08_模式匹配"/></a><div class="content"><a class="title" href="/oct25-xxxxx/2024/02/24/51%E5%A4%A7%E6%95%B0%E6%8D%AE%E4%B9%8B%E5%A4%9A%E8%8C%83%E5%BC%8F%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80Scala08_%E6%A8%A1%E5%BC%8F%E5%8C%B9%E9%85%8D/" title="大数据之多范式编程语言 Scala08_模式匹配">大数据之多范式编程语言 Scala08_模式匹配</a><time datetime="2024-02-24T00:46:12.000Z" title="发表于 2024-02-24 08:46:12">2024-02-24</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/oct25-xxxxx/2024/02/22/50%E5%A4%A7%E6%95%B0%E6%8D%AE%E4%B9%8B%E5%A4%9A%E8%8C%83%E5%BC%8F%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80Scala07_%E9%9B%86%E5%90%88/" title="大数据之多范式编程语言 Scala07_集合"><img src="/oct25-xxxxx/img/cover_img/ctt50.png" onerror="this.onerror=null;this.src='/oct25-xxxxx/img/404.jpg'" alt="大数据之多范式编程语言 Scala07_集合"/></a><div class="content"><a class="title" href="/oct25-xxxxx/2024/02/22/50%E5%A4%A7%E6%95%B0%E6%8D%AE%E4%B9%8B%E5%A4%9A%E8%8C%83%E5%BC%8F%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80Scala07_%E9%9B%86%E5%90%88/" title="大数据之多范式编程语言 Scala07_集合">大数据之多范式编程语言 Scala07_集合</a><time datetime="2024-02-22T08:16:10.000Z" title="发表于 2024-02-22 16:16:10">2024-02-22</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/oct25-xxxxx/2024/02/21/49%E5%A4%A7%E6%95%B0%E6%8D%AE%E4%B9%8B%E5%A4%9A%E8%8C%83%E5%BC%8F%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80Scala06_%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1/" title="大数据之多范式编程语言 Scala06_面向对象"><img src="/oct25-xxxxx/img/cover_img/ctt49.png" onerror="this.onerror=null;this.src='/oct25-xxxxx/img/404.jpg'" alt="大数据之多范式编程语言 Scala06_面向对象"/></a><div class="content"><a class="title" href="/oct25-xxxxx/2024/02/21/49%E5%A4%A7%E6%95%B0%E6%8D%AE%E4%B9%8B%E5%A4%9A%E8%8C%83%E5%BC%8F%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80Scala06_%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1/" title="大数据之多范式编程语言 Scala06_面向对象">大数据之多范式编程语言 Scala06_面向对象</a><time datetime="2024-02-21T07:01:10.000Z" title="发表于 2024-02-21 15:01:10">2024-02-21</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/oct25-xxxxx/2024/02/20/48%E5%A4%A7%E6%95%B0%E6%8D%AE%E4%B9%8B%E5%A4%9A%E8%8C%83%E5%BC%8F%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80Scala05_%E5%87%BD%E6%95%B0%E5%BC%8F%E7%BC%96%E7%A8%8B/" title="大数据之多范式编程语言 Scala05_函数式编程"><img src="/oct25-xxxxx/img/cover_img/ctt48.png" onerror="this.onerror=null;this.src='/oct25-xxxxx/img/404.jpg'" alt="大数据之多范式编程语言 Scala05_函数式编程"/></a><div class="content"><a class="title" href="/oct25-xxxxx/2024/02/20/48%E5%A4%A7%E6%95%B0%E6%8D%AE%E4%B9%8B%E5%A4%9A%E8%8C%83%E5%BC%8F%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80Scala05_%E5%87%BD%E6%95%B0%E5%BC%8F%E7%BC%96%E7%A8%8B/" title="大数据之多范式编程语言 Scala05_函数式编程">大数据之多范式编程语言 Scala05_函数式编程</a><time datetime="2024-02-20T12:05:11.000Z" title="发表于 2024-02-20 20:05:11">2024-02-20</time></div></div></div></div><div class="card-widget card-categories"><div class="item-headline">
            <i class="fas fa-folder-open"></i>
            <span>分类</span>
            
            </div>
            <ul class="card-category-list" id="aside-cat-list">
            <li class="card-category-list-item "><a class="card-category-list-link" href="/oct25-xxxxx/categories/NoSQL%E6%95%B0%E6%8D%AE%E5%BA%93/"><span class="card-category-list-name">NoSQL数据库</span><span class="card-category-list-count">5</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/oct25-xxxxx/categories/%E4%BB%BB%E5%8A%A1%E8%B0%83%E5%BA%A6/"><span class="card-category-list-name">任务调度</span><span class="card-category-list-count">1</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/oct25-xxxxx/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE%E7%BB%84%E4%BB%B6/"><span class="card-category-list-name">大数据组件</span><span class="card-category-list-count">16</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/oct25-xxxxx/categories/%E5%AE%B9%E5%99%A8%E5%8C%96/"><span class="card-category-list-name">容器化</span><span class="card-category-list-count">6</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/oct25-xxxxx/categories/%E5%BE%AE%E6%9C%8D%E5%8A%A1%E7%BB%84%E4%BB%B6/"><span class="card-category-list-name">微服务组件</span><span class="card-category-list-count">7</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/oct25-xxxxx/categories/%E6%B6%88%E6%81%AF%E4%B8%AD%E9%97%B4%E4%BB%B6/"><span class="card-category-list-name">消息中间件</span><span class="card-category-list-count">2</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/oct25-xxxxx/categories/%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80/"><span class="card-category-list-name">编程语言</span><span class="card-category-list-count">9</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/oct25-xxxxx/categories/%E9%9A%8F%E7%AC%94/"><span class="card-category-list-name">随笔</span><span class="card-category-list-count">5</span></a></li>
            </ul></div><div class="card-widget card-tags"><div class="item-headline"><i class="fas fa-tags"></i><span>标签</span></div><div class="card-tag-cloud"><a href="/oct25-xxxxx/tags/DataX/" style="font-size: 1.1em; color: #999">DataX</a> <a href="/oct25-xxxxx/tags/Docker/" style="font-size: 1.37em; color: #99a4b2">Docker</a> <a href="/oct25-xxxxx/tags/Elasticsearch/" style="font-size: 1.1em; color: #999">Elasticsearch</a> <a href="/oct25-xxxxx/tags/Flume/" style="font-size: 1.17em; color: #999c9f">Flume</a> <a href="/oct25-xxxxx/tags/Hadoop/" style="font-size: 1.43em; color: #99a6b9">Hadoop</a> <a href="/oct25-xxxxx/tags/Hive/" style="font-size: 1.3em; color: #99a1ac">Hive</a> <a href="/oct25-xxxxx/tags/Kafka/" style="font-size: 1.1em; color: #999">Kafka</a> <a href="/oct25-xxxxx/tags/MongoDB/" style="font-size: 1.23em; color: #999ea6">MongoDB</a> <a href="/oct25-xxxxx/tags/MySQL/" style="font-size: 1.1em; color: #999">MySQL</a> <a href="/oct25-xxxxx/tags/RabbitMQ/" style="font-size: 1.1em; color: #999">RabbitMQ</a> <a href="/oct25-xxxxx/tags/Redis/" style="font-size: 1.23em; color: #999ea6">Redis</a> <a href="/oct25-xxxxx/tags/Scala/" style="font-size: 1.5em; color: #99a9bf">Scala</a> <a href="/oct25-xxxxx/tags/SpringCloud/" style="font-size: 1.3em; color: #99a1ac">SpringCloud</a> <a href="/oct25-xxxxx/tags/SpringSecurity/" style="font-size: 1.1em; color: #999">SpringSecurity</a> <a href="/oct25-xxxxx/tags/XXL-JOB/" style="font-size: 1.1em; color: #999">XXL-JOB</a> <a href="/oct25-xxxxx/tags/Zookeeper/" style="font-size: 1.1em; color: #999">Zookeeper</a> <a href="/oct25-xxxxx/tags/ubuntu/" style="font-size: 1.1em; color: #999">ubuntu</a></div></div><div class="card-widget card-archives"><div class="item-headline"><i class="fas fa-archive"></i><span>归档</span><a class="card-more-btn" href="/oct25-xxxxx/archives/" title="查看更多">
    <i class="fas fa-angle-right"></i></a></div><ul class="card-archive-list"><li class="card-archive-list-item"><a class="card-archive-list-link" href="/oct25-xxxxx/archives/2024/02/"><span class="card-archive-list-date">二月 2024</span><span class="card-archive-list-count">9</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/oct25-xxxxx/archives/2024/01/"><span class="card-archive-list-date">一月 2024</span><span class="card-archive-list-count">2</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/oct25-xxxxx/archives/2023/12/"><span class="card-archive-list-date">十二月 2023</span><span class="card-archive-list-count">4</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/oct25-xxxxx/archives/2023/11/"><span class="card-archive-list-date">十一月 2023</span><span class="card-archive-list-count">3</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/oct25-xxxxx/archives/2023/10/"><span class="card-archive-list-date">十月 2023</span><span class="card-archive-list-count">5</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/oct25-xxxxx/archives/2023/09/"><span class="card-archive-list-date">九月 2023</span><span class="card-archive-list-count">6</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/oct25-xxxxx/archives/2023/08/"><span class="card-archive-list-date">八月 2023</span><span class="card-archive-list-count">6</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/oct25-xxxxx/archives/2023/07/"><span class="card-archive-list-date">七月 2023</span><span class="card-archive-list-count">8</span></a></li></ul></div></div></div></main><footer id="footer" style="background-image: url('/oct25-xxxxx/img/bg.png')"><div id="footer-wrap"><div class="copyright">&copy;2020 - 2024 By Oct25-X</div><div class="framework-info"><span>框架 </span><a target="_blank" rel="noopener" href="https://hexo.io">Hexo</a><span class="footer-separator">|</span><span>主题 </span><a target="_blank" rel="noopener" href="https://github.com/jerryc127/hexo-theme-butterfly">Butterfly</a></div></div></footer></div><div id="rightside"><div id="rightside-config-hide"><button id="translateLink" type="button" title="简繁转换">繁</button><button id="darkmode" type="button" title="浅色和深色模式转换"><i class="fas fa-adjust"></i></button><button id="hide-aside-btn" type="button" title="单栏和双栏切换"><i class="fas fa-arrows-alt-h"></i></button></div><div id="rightside-config-show"><button id="rightside_config" type="button" title="设置"><i class="fas fa-cog fa-spin"></i></button><button id="go-up" type="button" title="回到顶部"><i class="fas fa-arrow-up"></i></button></div></div><div id="local-search"><div class="search-dialog"><nav class="search-nav"><span class="search-dialog-title">本地搜索</span><span id="loading-status"></span><button class="search-close-button"><i class="fas fa-times"></i></button></nav><div class="is-center" id="loading-database"><i class="fas fa-spinner fa-pulse"></i><span>  数据库加载中</span></div><div class="search-wrap"><div id="local-search-input"><div class="local-search-box"><input class="local-search-box--input" placeholder="搜索文章" type="text"/></div></div><hr/><div id="local-search-results"></div></div></div><div id="search-mask"></div></div><div id="rightMenu"><div class="rightMenu-group rightMenu-small"><div class="rightMenu-item" id="menu-backward"><i class="fa-solid fa-arrow-left"></i></div><div class="rightMenu-item" id="menu-forward"><i class="fa-solid fa-arrow-right"></i></div><div class="rightMenu-item" id="menu-refresh"><i class="fa-solid fa-arrow-rotate-right"></i></div><div class="rightMenu-item" id="menu-home"><i class="fa-solid fa-house"></i></div></div><div class="rightMenu-group rightMenu-line rightMenuOther"><a class="rightMenu-item menu-link" href="/archives/"><i class="fa-solid fa-archive"></i><span>文章归档</span></a><a class="rightMenu-item menu-link" href="/categories/"><i class="fa-solid fa-folder-open"></i><span>文章分类</span></a><a class="rightMenu-item menu-link" href="/tags/"><i class="fa-solid fa-tags"></i><span>文章标签</span></a></div><div class="rightMenu-group rightMenu-line rightMenuNormal"><a class="rightMenu-item" id="menu-translate"><i class="fa-solid fa-earth-asia"></i><span>繁简切换</span></a><div class="rightMenu-item" id="menu-darkmode"><i class="fa-solid fa-moon"></i><span>切换模式</span></div></div></div><div id="rightmenu-mask"></div><div><script src="/oct25-xxxxx/js/utils.js"></script><script src="/oct25-xxxxx/js/main.js"></script><script src="/oct25-xxxxx/js/tw_cn.js"></script><script src="https://cdn.jsdelivr.net/npm/@fancyapps/ui/dist/fancybox.umd.js"></script><script src="/oct25-xxxxx/js/search/local-search.js"></script><div class="js-pjax"><script>function subtitleType () {
  if (true) { 
    window.typed = new Typed("#subtitle", {
      strings: ["每一个不曾起舞的日子&#44; 都是对生活的辜负 !","Never put off till tomorrow what you can do today.","成熟的人眼里满是前途&#44; 稚嫩的人眼里满是爱恨情仇 !","Keep Writing and Keep Loving.","今日事&#44; 今日畢"],
      startDelay: 300,
      typeSpeed: 150,
      loop: true,
      backSpeed: 50
    })
  } else {
    document.getElementById("subtitle").innerHTML = '每一个不曾起舞的日子&#44; 都是对生活的辜负 !'
  }
}

if (true) {
  if (typeof Typed === 'function') {
    subtitleType()
  } else {
    getScript('https://cdn.jsdelivr.net/npm/typed.js/lib/typed.min.js').then(subtitleType)
  }
} else {
  subtitleType()
}</script></div><script defer src="https://npm.elemecdn.com/jquery@latest/dist/jquery.min.js"></script><script defer data-pjax src="/js/rightMenu.js"></script><script defer="defer" id="ribbon" src="https://cdn.jsdelivr.net/npm/butterfly-extsrc@1/dist/canvas-ribbon.min.js" size="150" alpha="0.6" zIndex="-1" mobile="false" data-click="true"></script><script src="https://cdn.jsdelivr.net/npm/butterfly-extsrc@1/dist/activate-power-mode.min.js"></script><script>POWERMODE.colorful = true;
POWERMODE.shake = true;
POWERMODE.mobile = false;
document.body.addEventListener('input', POWERMODE);
</script><script id="click-heart" src="https://cdn.jsdelivr.net/npm/butterfly-extsrc@1/dist/click-heart.min.js" async="async" mobile="false"></script><script async data-pjax src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script></div></body></html>